package com.example.entity;

import lombok.Data;

import javax.persistence.*;

/**
 * 账户基础信息基类（抽象实体）
 * <p>
 * 设计目的：
 * 1. 提取用户/管理员账户的公共属性
 * 2. 实现账户体系的统一管理
 * 3. 支持多账户类型继承扩展
 * </p>
 * <p>
 * 核心特性：
 * 1. 包含基础认证信息（用户名/密码）
 * 2. 定义账户层级体系（level字段）
 * 3. 使用@MappedSuperclass实现继承映射
 * </p>
 */
@Data
public class Account {

    /**
     * 主键ID（自增）
     * 对应数据库列：id
     * 说明：由各子类具体实现，此处标记为抽象主键
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 登录用户名（唯一）
     * 对应数据库列：name
     * 示例值："admin"
     */
    @Column(name = "name")
    private String name;

    /**
     * 加密密码
     * 对应数据库列：password
     * 示例值："$2a$10$exampleHash"
     */
    @Column(name = "password")
    private String password;

    /**
     * 账户等级（权限级别）
     * 对应数据库列：level
     * 取值示例：
     * - 0：系统级账户
     * - 1：管理级账户
     * - 2：普通用户账户
     * 业务规则：
     * - 数值越小权限越高
     */
    @Column(name = "level")
    private Integer level;

    /**
     * 性别标识
     * 对应数据库列：sex
     */
    @Column(name = "sex")
    private String sex;


    /**
     * 用户昵称
     * 对应数据库列：nickName
     * 示例值："张三"
     * 业务规则：
     * - 中文2-8字
     */
    @Column(name = "nickName")
    private String nickName;


    /**
     * 新密码（临时存储，用于密码修改）
     * @Transient 注解表示不持久化到数据库
     * 业务规则：
     * - 修改密码时临时存储新密码
     * - 使用后应立即清除
     */
    @Transient
    private String newPassword;

    /**
     * 联系地址（临时存储）
     * @Transient 注解表示不持久化到数据库
     * 示例值："贵阳市观山湖区"
     * 业务场景：
     * - 用户资料填写时的临时存储
     * - 地址信息建议单独建表存储
     */
    @Transient
    private String address;

    /**
     * 联系电话（临时存储）
     * @Transient 注解表示不持久化到数据库
     * 格式示例："+86 13800138000"
     * 验证规则：
     * - 需实现正则校验
     */
    @Transient
    private String phone;

    /**
     * 账户（临时存储，示例字段）
     * @Transient 注解表示不持久化到数据库
     */
    @Transient
    private Double account;

//    public Long getId() {
//        return id;
//    }
//
//    public void setId(Long id) {
//        this.id = id;
//    }
//
//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    public String getPassword() {
//        return password;
//    }
//
//    public void setPassword(String password) {
//        this.password = password;
//    }
//
//    public Integer getLevel() {
//        return level;
//    }
//
//    public void setLevel(Integer level) {
//        this.level = level;
//    }
//
//    public String getSex() {
//        return sex;
//    }
//
//    public void setSex(String sex) {
//        this.sex = sex;
//    }
//
//    public String getNewPassword() {
//        return newPassword;
//    }
//
//    public void setNewPassword(String newPassword) {
//        this.newPassword = newPassword;
//    }
//
//    public String getAddress() {
//        return address;
//    }
//
//    public void setAddress(String address) {
//        this.address = address;
//    }
//
//    public String getNickName() {
//        return nickName;
//    }
//
//    public void setNickName(String nickName) {
//        this.nickName = nickName;
//    }
//
//    public String getPhone() {
//        return phone;
//    }
//
//    public void setPhone(String phone) {
//        this.phone = phone;
//    }
//
//    public Double getAccount() {
//        return account;
//    }
//
//    public void setAccount(Double account) {
//        this.account = account;
//    }
}
